/**
 * 后端API响应适配器
 * 用于将后端返回的数据格式转换为前端所需的格式
 */

/**
 * 适配登录响应
 * @param {Object} response 后端登录响应
 * @returns {Object} 适配后的登录响应
 */
export function adaptLoginResponse(response) {
    console.log('适配登录响应:', response)

    // 如果响应是直接的字符串，可能是token
    if (typeof response === 'string') {
        return {
            token: response
        }
    }

    // 后端可能返回 { data: { token: '...' } } 或 { token: '...' }
    const data = response.data || response

    return {
        token: data.token || data.accessToken || data.access_token || data.jwt || data
    }
}

/**
 * 适配用户信息响应
 * @param {Object} response 后端用户信息响应
 * @returns {Object} 适配后的用户信息
 */
export function adaptUserInfoResponse(response) {
    console.log('适配用户信息响应:', response)

    // 后端可能返回 { data: { ... } } 或直接返回数据对象
    const data = response.data || response

    return {
        userId: data.userId || data.id || data.user_id,
        username: data.username || data.name || data.userName,
        avatar: data.avatar || data.photo || '',
        roles: Array.isArray(data.roles) ? data.roles :
            (data.role ? [data.role] :
                (data.roleList ? data.roleList : [])),
        permissions: data.permissions || data.permissionList ||
            data.perms || (data.roles && data.roles.length > 0 ? ['*:*:*'] : [])
    }
}

/**
 * 适配菜单路由响应
 * @param {Object} response 后端菜单路由响应
 * @returns {Array} 适配后的菜单路由
 */
export function adaptRoutesResponse(response) {
    console.log('适配菜单路由响应:', response)

    // 如果响应为空，返回空数组
    if (!response) {
        console.error('菜单路由响应为空')
        return []
    }

    // 后端可能返回 { data: [...] } 或直接返回数组
    const data = response.data || response

    if (!data) {
        console.error('菜单路由响应data为空')
        return []
    }

    if (!Array.isArray(data)) {
        console.error('菜单路由响应不是数组:', data)

        // 尝试从对象中提取数组
        if (typeof data === 'object') {
            // 常见的可能包含菜单数组的属性名
            const possibleArrayProps = ['routes', 'menus', 'list', 'items', 'children']

            for (const prop of possibleArrayProps) {
                if (Array.isArray(data[prop])) {
                    console.log(`找到数组属性: ${prop}`, data[prop])
                    return data[prop]
                }
            }

            // 找不到预定义的属性，尝试查找任何数组类型的属性
            for (const key in data) {
                if (Array.isArray(data[key])) {
                    console.log(`找到数组属性: ${key}`, data[key])
                    return data[key]
                }
            }
        }

        // 如果无法找到数组，返回空数组
        return []
    }

    return data
} 